#pragma once
#include <string>
#include <memory>
#include <rclcpp/rclcpp.hpp>
#include <behaviortree_cpp/behavior_tree.h>
#include <behaviortree_cpp/tree_node.h>
#include <behaviortree_cpp/action_node.h>

#include "fishbot_behavior_tree/behavior_context.hpp"


namespace fishbot::behavior_tree
{
    /**
     * @brief 模板类，继承自 BT::StatefulActionNode，
     *        它的主要作用是为行为树中的节点提供一个统一的接口，
     *        用于访问共享的资源（如 BehaviorContext），从而简化行为树节点的开发和资源管理。
     * 
     * @tparam BTNode 
     */
    template <typename BTNode>
    class SharedResourcesNode : public BT::StatefulActionNode
    {
    public:
        SharedResourcesNode(const std::string &name, const BT::NodeConfiguration &config, const std::shared_ptr<BehaviorContext> &shared_resources)
            : BT::StatefulActionNode(name, config), shared_resources_(shared_resources) {}
        ~SharedResourcesNode() {}

        const std::shared_ptr<BehaviorContext> shared_resources_;
    };
}